#ifndef ARCHIVOTERMDOC_H_
#define ARCHIVOTERMDOC_H_

#include "indexes/ArbolBMas.h"
#include "indexes/Registro.h"
#include <string>
#include <vector>

#ifndef ID_TERMINO
#define ID_TERMINO "idTermino"
#endif

#ifndef ID_DOCUMENTO
#define ID_DOCUMENTO "idDocumento"
#endif

using namespace std;

/*
 * Clase que define la clave del indice
 */
class ClaveCompuesta : public Registro
{
public:
	ClaveCompuesta(const long idTerm=0, const long idDoc=0)
	{
		(*this)[ID_TERMINO] = idTerm;
		(*this)[ID_DOCUMENTO] = idDoc;
	}
	long getIdTermino(){return *((long*) ((*this)[ID_TERMINO].getValor()));}
	long getIdDocumento(){return *((long*) ((*this)[ID_DOCUMENTO].getValor()));}
};

/*
 * Clase que define el dato
 */
class DatoNull : public Registro
{
public:
	DatoNull()
	{
	}
};

class archivoTermDoc
{
private:
	ArbolBMas<ClaveCompuesta,DatoNull> indice;
public:
	archivoTermDoc(string ruta);
	~archivoTermDoc();
	/*
	 * Agrega la relación Termino - Documento
	 */
	int agregarTermDoc(long idTerm, long idDoc);
	/*
	 * Elimina la relación Termino - Documento
	 */
	void eliminarTermDoc(long idTerm, long idDoc);
	/*
	 * Devuelve todos los id de los documentos en los cuales esta incluido
	 * el termino cuyo id es idTerm
	 */
	vector<long> obtenerDocumentos(long idTerm);
};

#endif /*ARCHIVOTERMDOC_H_*/
